package cn.fl.insurance.service;

import cmm.mid.core.framework.page.DataResultVO;
import cmm.mid.core.framework.page.KeyValueVO;
import cmm.mid.core.framework.page.Pager;
import cn.cmm.base.framework.exception.BaseException;
import cn.fl.insurance.condition.InsPlcBscInfoQueryCondition;
import cn.fl.insurance.condition.InsPrjInfoQueryCondition;
import cn.fl.insurance.vo.InsPlcBscInfoVO;
import cn.fl.insurance.vo.InsPrjInfoVO;
import cn.fl.insurance.vo.PlcFileInfoVO;
import cn.fl.project.condition.PrjPrdDtlForInsQueryCondition;
import cn.fl.project.dto.PrjPrdDtlForInsDTO;
import cn.fl.project.vo.PrjBscInfoVO;
import cn.fl.project.vo.PrjPrdDtlForInsVO;
import fl.customer.facade.customer.dto.CstBscInfoDTO;

import java.util.List;
import java.util.Map;

/**
 * @Description: 保单基础信息表 客户端服务层接口
 * 业务层方法名称前缀：
 * 新增：add*
 * 删除：remove*
 * 修改：modify*
 * 批量：batch*
 * 查询对象：select* get*
 * 查询集合：search*
 */
public interface IInsPlcBscInfoService {

    /**
     * 获取唯一对象
     *
     * @param id 主键
     * @return 对象DTO
     */
    public InsPlcBscInfoVO selectById(Long id) throws BaseException;

    /**
     * 新增
     *
     * @param entity
     * @return
     */
    public Long add(InsPlcBscInfoVO entity) throws BaseException;

    /**
     * 批量删除
     *
     * @param ids
     * @return
     */
    public boolean removeByIds(List<Long> ids) throws BaseException;

    /**
     * 修改
     *
     * @param entity
     * @return
     */
    public boolean modify(InsPlcBscInfoVO entity) throws BaseException;

    /**
     * 修改
     *
     * @param list
     * @return
     */
    public boolean modify(List<InsPlcBscInfoVO> list) throws BaseException;

    /**
     * 分页查询所有
     *
     * @param page
     * @return
     */
    public Pager searchListPage(Pager page) throws BaseException;

    /**
     * 分页查询 投保管理
     *
     * @param page
     * @return
     */
    public Pager searchInsureListPage(Pager page) throws BaseException;

    /**
     * 分页查询 投保管理
     *
     * @param
     * @return
     */
    public List<PrjPrdDtlForInsVO> searchInsureList(PrjPrdDtlForInsQueryCondition queryCondition) throws BaseException;

    /**
     * 根据项目产品明细ID查询产品列表
     * @param queryCondition
     * @return
     * @throws BaseException
     */
    public List<PrjPrdDtlForInsDTO> searchInsurePrdList(PrjPrdDtlForInsQueryCondition queryCondition) throws BaseException;

    /**
     * 分页查询 续保管理
     *
     * @param page
     * @return
     */
    public Pager searchRenewalListPage(Pager page) throws BaseException;

    /**
     * 分页查询 保险管理
     *
     * @param page
     * @return
     */
    public Pager searchPlcMgrListPage(Pager page) throws BaseException;


    /**
     * 根据条件查询所有
     *
     * @param condition
     * @return
     */
    public List<InsPlcBscInfoVO> searchList(InsPlcBscInfoQueryCondition condition) throws BaseException;

    /**
     * 查询险种数据字典
     * @return
     */
    public List<KeyValueVO> searchInsTypCdList();

    /**
     * 查询购买方式数据字典
     * @return
     */
    public List<KeyValueVO> searchBuyWayCdList();

    /**
     * 查询保单期限数据字典
     * @return
     */
    public List<KeyValueVO> searchPlcExpCdList();

    /**
     * 查询保险性质数据字典
     * @return
     */
    public List<KeyValueVO> searchPlcPropCdList();

    /**
     * 查询保险产品类型数据字典
     * @return
     */
    public List<KeyValueVO> searchPrdTypCdList();

    /**
     * 查询保险特殊政策数据字典
     * @return
     */
    public List<KeyValueVO> searchPlcSpePolCdList();

    /**
     * 查询续保状态数据字典
     * @return
     */
    public List<KeyValueVO> searchReneStsCdList();

    /**
     * 根据组代码查询数据字典
     * @param grpCd
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchDictByGrpCd(String grpCd) throws BaseException;

    /**
     * 验证保单号是否重复
     * @param plcNo
     * @return
     * @throws BaseException
     */
    public boolean validatePlcNo(String plcNo) throws BaseException;

    /**
     * 验证保险公司是否设置渠道信息
     * @param insCompId
     * @param prdTypCd
     * @param insTypCd
     * @return
     * @throws BaseException
     */
    public Map<String,String> validateInsComp(Long insCompId, String prdTypCd, String insTypCd) throws BaseException;

    /**
     * 验证项目产品对应的保险险种是否已录入
     * @param prjPrdDtlId
     * @param insTypCd
     * @return
     * @throws BaseException
     */
    public boolean validateInsTyp(Long prjPrdDtlId, String insTypCd) throws BaseException;


    /**
     * 查询保险客户信息
     * @param cstId
     * @return
     * @throws BaseException
     */
    public CstBscInfoDTO selectPlcCstInfo(Long cstId) throws BaseException;

    /**
     * 查询续保产品保单信息
     * @param condition
     * @return
     * @throws BaseException
     */
    public List<InsPrjInfoVO> searchRenewalPrdList(InsPrjInfoQueryCondition condition) throws BaseException;

    /**
     * 查询项目信息
     * @param prjId
     * @return
     * @throws BaseException
     */
    public PrjBscInfoVO searchPrjBscInfo(Long prjId) throws BaseException;

    /**
     * 发起续保申请
     * @param condition
     * @return
     * @throws BaseException
     */
    public DataResultVO addRenewApply(InsPlcBscInfoQueryCondition condition) throws BaseException;

    /**
     * 修改保单保证金处理方式
     * @param condition
     * @return
     * @throws BaseException
     */
    public DataResultVO modifyHandleWay(InsPlcBscInfoQueryCondition condition) throws BaseException;

    /**
     * 保单附件配置列表
     * @param condition
     * @return
     * @throws BaseException
     */
    public List<PlcFileInfoVO> searchPlcCfgFileInfoList(InsPlcBscInfoQueryCondition condition) throws BaseException;

    /**
     * 删除保单上传的文件
     * @param id
     * @return
     * @throws BaseException
     */
    public boolean removePlcFile(Long id) throws BaseException;

    /**
     * 查询保险第一受益人数据字典
     * @return
     */
    public List<KeyValueVO> searchInsFstPerTypCdList() throws BaseException ;

    /**
     * 查询保单信息
     * @return
     */
	public List<InsPlcBscInfoVO> selectListLicNo()throws BaseException;


}


